
//⽆返回值⽆参数
@FunctionalInterface
interface NoParameterNoReturn {
    void test();
}
//⽆返回值⼀个参数
@FunctionalInterface
interface OneParameterNoReturn {
    void test(int a);
}
//⽆返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {
    void test(int a,int b);
}
//有返回值⽆参数
@FunctionalInterface
interface NoParameterReturn {
    int test();
}
//有返回值⼀个参数
@FunctionalInterface
interface OneParameterReturn {
    int test(int a);
}
//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {
    int test(int a,int b);
}

public class TestLambda {
    public static void main1(String[] args) {
        NoParameterNoReturn noParameterNoReturn = ()->{
            System.out.println("⽆参数⽆返回值");
        };
        noParameterNoReturn.test();


        OneParameterNoReturn oneParameterNoReturn = (int a)->{
            System.out.println("⼀个参数⽆返回值："+ a);
        };
        oneParameterNoReturn.test(10);


        MoreParameterNoReturn moreParameterNoReturn = (int a,int b)->{
            System.out.println("多个参数⽆返回值："+a+" "+b);
        };
        moreParameterNoReturn.test(20,30);


        NoParameterReturn noParameterReturn = ()->{
            System.out.println("有返回值⽆参数！");
            return 40;
        };


        //接收函数的返回值
        int ret = noParameterReturn.test();
        System.out.println(ret);
        OneParameterReturn oneParameterReturn = (int a)->{
            System.out.println("有返回值有⼀个参数！");
            return a;
        };


        ret = oneParameterReturn.test(50);
        System.out.println(ret);
        MoreParameterReturn moreParameterReturn = (int a,int b)->{
            System.out.println("有返回值多个参数！");
            return a+b;
        };
        ret = moreParameterReturn.test(60,70);
        System.out.println(ret);
    }


    //1. 参数类型可以省略，如果需要省略，每个参数的类型都要省略。
    //2. 参数的⼩括号⾥⾯只有⼀个参数，那么⼩括号可以省略
    //3. 如果⽅法体当中只有⼀句代码，那么⼤括号可以省略
    //4. 如果⽅法体中只有⼀条语句，且是return语句，那么⼤括号可以省略，且去掉return关键字。
    public static void main(String[] args) {
        MoreParameterNoReturn moreParameterNoReturn = ( a, b)->{
            System.out.println("⽆返回值多个参数，省略参数类型："+a+" "+b);
        };
        moreParameterNoReturn.test(20,30);
        OneParameterNoReturn oneParameterNoReturn = a ->{
            System.out.println("⽆参数⼀个返回值,⼩括号可以胜率："+ a);
        };
        oneParameterNoReturn.test(10);
        NoParameterNoReturn noParameterNoReturn = ()->System.out.println("⽆参数⽆返 回值，⽅法体中只有⼀⾏代码");
        noParameterNoReturn.test();
        //⽅法体中只有⼀条语句，且是return语句
        NoParameterReturn noParameterReturn = ()-> 40;
        int ret = noParameterReturn.test();
        System.out.println(ret);
    }

}
